/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {boolean}
 */
// 递归查找，将查找过的元素置为true，坏处会改变原矩阵，避免重复访问，算是剪枝吧
var searchMatrix = function(matrix, target) {
    // let i = 0, j = 0
    let r = matrix.length, c = matrix[0].length
    let isFind = false
    const iter = function(i, j, target) {
        // 越界或者已经访问过
        if(i > r - 1 || j > c - 1 || matrix[i][j] === true) return
        // 找到
        if(matrix[i][j] ===  target) {
            isFind = true
            return
        }
        // 比target还要大，直接返回
        if(matrix[i][j] > target) return
        if(matrix[i][j] < target) {
            matrix[i][j] = true // 已经访问
            iter(i, j + 1, target); // 递归右边
            iter(i + 1, j, target); // 递归左边
        }
    }
    iter(0, 0, target)
    return isFind
};